SQL Serverの標準機能で操作ログを管理する
誰が、いつ、どのDBに接続して、どんなクエリを発行したのかを保存し、いざという時にサッと出せるようにDBへのアクセス、操作記録を保持しておきたい
DBのデータ
監査証跡(ログ記録)を残し、検知、追跡できるようにしたい
改ざんされたとき、誤操作でデータ不正を起こしたときのために
復元できるようにしたい
物理的に漏えいしたときのために
暗号化しておきたい
など
どこの、どこに
クライアント-サーバーシステムの場合どこに仕込むのが適切なのか
DBが最も重要
DBを操作される=情報が漏えいする、データを改ざんされる
どのようなデータを監視すれば良いのか
方法
データベース(今回はSQL Server)内にそういう仕組みがありそう
SQL Server 2008から機能が追加されている
Microsoftがコンプライアンス実現のためのガイドラインというそのままのタイトルで資料を公開している
すごく細かく書いてある
コンプライアンス シナリオ実施の背景
昨今は、「内部統制」や「J-SOX法」(日本版SOX法)などのコンプライアンス(法令遵守)の実現、「情報漏えい」や「不正なデータ改ざん」を防止するためなど、データベース セキュリティに対するニーズが非常に高まっています。
そこで、このシナリオでは、SQL Server 2008でカバーできる範囲を明確化し、J-SOX法に代表されるコンプライアンスの実現のために必要となる機能の実装方法およびシステムへの影響(パフォーマンスへの影響など)を測定することを目的としました。
コンプライアンス実現のためのガイドライン
徹底検証シリーズは2008のみ?
X社のRFPでの監査に対する要件
上記ガイドラインに登場するRFPでは、以下を満たすこととされている
虚偽記載の監視
財務諸表に対する虚偽記載を監査証跡できること
J-SOX法対応
未許可アクセスの監視
すべてのDML操作(SELECT/UPDATE/INSERT/DELETE)
ユーザーごとの操作変更履歴の監視
どのユーザーから発行されたSQLなのか
DBMSを直接操作したときの操作変更履歴の監視
sysadminやsaなどの特権ユーザーの動き
オブジェクト操作変更履歴の監視
テーブル、ストアドプロシージャ、ビューに対するDDL操作(CREATE/ALTER/DROP)
アカウント操作変更履歴の監視
アカウント作成
パスワード変更
ロール変更
アクセス権設定
監査要件を把握するためのレポート出力
容易に出力可能であること
容易の目安は週次、月次
要件は以下
特権ユーザーの操作履歴
未許可アクセス操作
アカウント操作の変更履歴
オブジェクト変更の操作履歴
(アプリケーションの操作履歴は、アプリケーション側で記録する)
手順
虚偽記載の監視
未許可アクセスの監視
ユーザーごとの操作変更履歴の監視
DBMSを直接操作したときの操作変更履歴の監視
オブジェクト操作変更履歴の監視
アカウント操作変更履歴の監視
SQL Server Auditで可能
監査要件を把握するためのレポート出力
SQL Server Auditで取得したログをfn_get_audit_file関数で取得可能
fn_get_audit_file (Transact-sql) - SQL Server | Microsoft Docs
懸念事項
監査用ログ取得によるシステムへの影響、パフォーマンスの低下
影響は少ない
数値がほしい
コンプライアンス実現のためのガイドラインのパフォーマンス検証結果に一応出てる
参考
SQL Server 2012 自習書シリーズ No.18 セキュリティ - HTML 版 - SQLQuality
SQL Server 2016の教科書の著書の資料
SQL Server監査機能:SQL Server Audit - くらげのChangeLog
SQL Server - ログイン履歴を残す方法(ログイン監査 Login Auditing の設定) - SQL Server&T-SQLに関するコラム - SQL Server 入門
ロギング考
ロギングにおける十戒 | Yakst
運用を支えるためのログを出すにはどうするか? #jjug_ccc #ccc_m3 - Speaker Deck